<!DOCTYPE html>

<html
  xmlns="http://www.w3.org/1999/xhtml"
  >
  <head>
    <title>Connected Scatterplot &#8211; from Data to Viz</title>

    <meta charset="utf-8" />
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta name="generator" content="pandoc" />
    <meta
      name="viewport"
      content="width=device-width, initial-scale=1, shrink-to-fit=no"
    />
    <meta
      name="description"
      content="An extensive description of Connected
Scatterplot. Definition, examples, input data, common caveats, tool to build it and potential alternatives."
    />
    <meta
      name="keywords"
      content="Data,Dataviz,Datavisualization,Plot,Chart,Graph,R,Python,D3,Learning,Caveat,Pitfall,Mistake,Classification"
    />
    <meta name="author" content="Yan Holtz and Conor Healy" />
    <link rel="icon" href="img/logo/data-to-viz.ico" />

    <!-- Control appearance when share by social media -->
    <meta property="og:title" content="Connected Scatterplot" />
    <meta
      property="og:image"
      content="https://github.com/holtzy/data_to_viz/raw/master/img/section/ScatterConnectedSmall.png"
    />
    <meta
      property="og:description"
      content="An extensive description of Connected
Scatterplot. Definition, examples, input data, common caveats, tool to build it and potential alternatives."
    />
    <meta
      property="og:url"
      content="www.data-to-viz.com/caveat/connectedscatter.html"
    />
    <meta property="og:type" content="website" />

    <style>
      .myheader {
        background-image: url("https://github.com/holtzy/data_to_viz/raw/master/img/overview_RGG_faded.png");
        min-height: 300px;
        background-size: 100% 100%;

        /* Create the parallax scrolling effect */
        background-attachment: fixed;
        background-position: center;
        background-repeat: no-repeat;
        background-size: cover;

        height: 100%;
        width: 100% !important;
      }
      .mytitle {
        text-transform: uppercase;
        font-family: "Montserrat";
        font-size: 200%;
        font-weight: 500;
        letter-spacing: 4px;
      }
    </style>

    <div class="myheader" style="text-align: center">
      <br />
      <a href="http://www.data-to-viz.com"
        ><img
          align="left"
          src="https://github.com/holtzy/data_to_viz/raw/master/img/logo/typo.png"
          style="width: 150px; vertical-align: top; margin-left: 5%"
      /></a>
      <br /><br />
      <br /><br />
      <a href="http://www.data-to-viz.com">
        <img
          src="https://github.com/holtzy/data_to_viz/raw/master/img/section/ScatterConnectedSmall.png"
      /></a>
      <br /><br />
      <p class="mytitle">Connected Scatterplot</p>
      <p style="color: #d0d0d0">
        <a href="#definition">definition</a> - <a href="#mistake">mistake</a> -
        <a href="#related">related</a> -
        <a href="#code">code</a>
      </p>
    </div>

         <script src="libs/header-attrs-2.27/header-attrs.js"></script>
<script src="libs/jquery-3.6.0/jquery-3.6.0.min.js"></script>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link href="libs/bootstrap-3.3.5/css/lumen.min.css" rel="stylesheet" />
<script src="libs/bootstrap-3.3.5/js/bootstrap.min.js"></script>
<script src="libs/bootstrap-3.3.5/shim/html5shiv.min.js"></script>
<script src="libs/bootstrap-3.3.5/shim/respond.min.js"></script>
<style>h1 {font-size: 34px;}
       h1.title {font-size: 38px;}
       h2 {font-size: 30px;}
       h3 {font-size: 24px;}
       h4 {font-size: 18px;}
       h5 {font-size: 16px;}
       h6 {font-size: 12px;}
       code {color: inherit; background-color: rgba(0, 0, 0, 0.04);}
       pre:not([class]) { background-color: white }</style>
<script src="libs/navigation-1.1/tabsets.js"></script>
<script src="libs/navigation-1.1/codefolding.js"></script>
<link href="libs/pagedtable-1.1/css/pagedtable.css" rel="stylesheet" />
<script src="libs/pagedtable-1.1/js/pagedtable.js"></script>       <style type="text/css">
      code {
        white-space: pre;
      }
    </style>
    <style type="text/css">
      pre > code.sourceCode { white-space: pre; position: relative; }
      pre > code.sourceCode > span { line-height: 1.25; }
      pre > code.sourceCode > span:empty { height: 1.2em; }
      .sourceCode { overflow: visible; }
      code.sourceCode > span { color: inherit; text-decoration: inherit; }
      div.sourceCode { margin: 1em 0; }
      pre.sourceCode { margin: 0; }
      @media screen {
      div.sourceCode { overflow: auto; }
      }
      @media print {
      pre > code.sourceCode { white-space: pre-wrap; }
      pre > code.sourceCode > span { display: inline-block; text-indent: -5em; padding-left: 5em; }
      }
      pre.numberSource code
        { counter-reset: source-line 0; }
      pre.numberSource code > span
        { position: relative; left: -4em; counter-increment: source-line; }
      pre.numberSource code > span > a:first-child::before
        { content: counter(source-line);
          position: relative; left: -1em; text-align: right; vertical-align: baseline;
          border: none; display: inline-block;
          -webkit-touch-callout: none; -webkit-user-select: none;
          -khtml-user-select: none; -moz-user-select: none;
          -ms-user-select: none; user-select: none;
          padding: 0 4px; width: 4em;
          color: #aaaaaa;
        }
      pre.numberSource { margin-left: 3em; border-left: 1px solid #aaaaaa;  padding-left: 4px; }
      div.sourceCode
        {   }
      @media screen {
      pre > code.sourceCode > span > a:first-child::before { text-decoration: underline; }
      }
      code span.al { color: #ff0000; font-weight: bold; } /* Alert */
      code span.an { color: #60a0b0; font-weight: bold; font-style: italic; } /* Annotation */
      code span.at { color: #7d9029; } /* Attribute */
      code span.bn { color: #40a070; } /* BaseN */
      code span.bu { color: #008000; } /* BuiltIn */
      code span.cf { color: #007020; font-weight: bold; } /* ControlFlow */
      code span.ch { color: #4070a0; } /* Char */
      code span.cn { color: #880000; } /* Constant */
      code span.co { color: #60a0b0; font-style: italic; } /* Comment */
      code span.cv { color: #60a0b0; font-weight: bold; font-style: italic; } /* CommentVar */
      code span.do { color: #ba2121; font-style: italic; } /* Documentation */
      code span.dt { color: #902000; } /* DataType */
      code span.dv { color: #40a070; } /* DecVal */
      code span.er { color: #ff0000; font-weight: bold; } /* Error */
      code span.ex { } /* Extension */
      code span.fl { color: #40a070; } /* Float */
      code span.fu { color: #06287e; } /* Function */
      code span.im { color: #008000; font-weight: bold; } /* Import */
      code span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Information */
      code span.kw { color: #007020; font-weight: bold; } /* Keyword */
      code span.op { color: #666666; } /* Operator */
      code span.ot { color: #007020; } /* Other */
      code span.pp { color: #bc7a00; } /* Preprocessor */
      code span.sc { color: #4070a0; } /* SpecialChar */
      code span.ss { color: #bb6688; } /* SpecialString */
      code span.st { color: #4070a0; } /* String */
      code span.va { color: #19177c; } /* Variable */
      code span.vs { color: #4070a0; } /* VerbatimString */
      code span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warning */
            div.sourceCode {
        overflow-x: visible;
      }
          </style>
        <style type="text/css">
      pre:not([class]) {
        background-color: white;
      }
    </style>
           <style type="text/css">
      h1 {
        font-size: 34px;
      }
      h1.title {
        font-size: 38px;
      }
      h2 {
        font-size: 30px;
      }
      h3 {
        font-size: 24px;
      }
      h4 {
        font-size: 18px;
      }
      h5 {
        font-size: 16px;
      }
      h6 {
        font-size: 12px;
      }
      .table th:not([align]) {
        text-align: left;
      }
          </style>
         <link
      rel="stylesheet"
      href="style.css"
      type="text/css"
      
    />
      </head>

  <body>
        <style type="text/css">
      .main-container {
        max-width: 940px;
        margin-left: auto;
        margin-right: auto;
      }
      code {
        color: inherit;
        background-color: rgba(0, 0, 0, 0.04);
      }
      img {
        max-width: 100%;
        height: auto;
      }
      .tabbed-pane {
        padding-top: 12px;
      }
      button.code-folding-btn:focus {
        outline: none;
      }
    </style>

     
    <div class="container-fluid main-container">
      <!-- tabsets -->
      <script>
        $(document).ready(function () {
          window.buildTabsets("TOC");
        });
      </script>

      <!-- code folding -->
            <style type="text/css">
        .code-folding-btn {
          margin-bottom: 4px;
        }
      </style>
      <script>
        $(document).ready(function () {
                          window.initializeCodeFolding("hide" === "show");
                });
      </script>
         
                    <div class="fluid-row" id="header">
                        <div class="btn-group pull-right">
              <button
                type="button"
                class="btn btn-default btn-xs dropdown-toggle"
                data-toggle="dropdown"
                aria-haspopup="true"
                aria-expanded="false"
              >
                <span>Show Code</span> <span class="caret"></span>
              </button>
              <ul class="dropdown-menu" style="min-width: 50px">
                                <li><a id="rmd-show-all-code" href="#">Show All Code</a></li>
                <li><a id="rmd-hide-all-code" href="#">Hide All Code</a></li>
                                </ul>
            </div>

                         </div>

              <div class="mycontent">
<div id="definition" class="section level1">
<h1>Definition</h1>
<hr />
<p>A <code>connected scatterplot</code> displays the evolution of a
numeric variable. Data points are represented by a dot and connected by
straight line segments. It often shows a trend in data over intervals of
time: a time series. Basically it is the same as a <a
href="https://www.data-to-viz.com/graph/line.html">line plot</a> in most
of the cases, except that individual observation are highlighted.</p>
<p>The following example shows the evolution of the <a
href="https://www.data-to-viz.com/story/TwoNumOrdered.html">bitcoin
price</a> in April 2018. Data comes from the <a
href="https://www.data-to-viz.com/story/TwoNumOrdered.html">CoinMarketCap</a>
website.</p>
<div class="sourceCode" id="cb1"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb1-1"><a href="#cb1-1" tabindex="-1"></a><span class="co"># Libraries</span></span>
<span id="cb1-2"><a href="#cb1-2" tabindex="-1"></a><span class="fu">library</span>(tidyverse)</span>
<span id="cb1-3"><a href="#cb1-3" tabindex="-1"></a><span class="fu">library</span>(hrbrthemes)</span>
<span id="cb1-4"><a href="#cb1-4" tabindex="-1"></a><span class="fu">library</span>(plotly)</span>
<span id="cb1-5"><a href="#cb1-5" tabindex="-1"></a><span class="fu">library</span>(patchwork)</span>
<span id="cb1-6"><a href="#cb1-6" tabindex="-1"></a><span class="fu">library</span>(babynames)</span>
<span id="cb1-7"><a href="#cb1-7" tabindex="-1"></a><span class="fu">library</span>(viridis)</span>
<span id="cb1-8"><a href="#cb1-8" tabindex="-1"></a></span>
<span id="cb1-9"><a href="#cb1-9" tabindex="-1"></a><span class="co"># Load dataset from github</span></span>
<span id="cb1-10"><a href="#cb1-10" tabindex="-1"></a>data <span class="ot">&lt;-</span> <span class="fu">read.table</span>(<span class="st">&quot;https://raw.githubusercontent.com/holtzy/data_to_viz/master/Example_dataset/3_TwoNumOrdered.csv&quot;</span>, <span class="at">header=</span>T)</span>
<span id="cb1-11"><a href="#cb1-11" tabindex="-1"></a>data<span class="sc">$</span>date <span class="ot">&lt;-</span> <span class="fu">as.Date</span>(data<span class="sc">$</span>date)</span>
<span id="cb1-12"><a href="#cb1-12" tabindex="-1"></a></span>
<span id="cb1-13"><a href="#cb1-13" tabindex="-1"></a><span class="co"># Plot</span></span>
<span id="cb1-14"><a href="#cb1-14" tabindex="-1"></a>data <span class="sc">%&gt;%</span></span>
<span id="cb1-15"><a href="#cb1-15" tabindex="-1"></a>  <span class="fu">tail</span>(<span class="dv">10</span>) <span class="sc">%&gt;%</span></span>
<span id="cb1-16"><a href="#cb1-16" tabindex="-1"></a>  <span class="fu">ggplot</span>( <span class="fu">aes</span>(<span class="at">x=</span>date, <span class="at">y=</span>value)) <span class="sc">+</span></span>
<span id="cb1-17"><a href="#cb1-17" tabindex="-1"></a>    <span class="fu">geom_line</span>(<span class="at">color=</span><span class="st">&quot;#69b3a2&quot;</span>) <span class="sc">+</span></span>
<span id="cb1-18"><a href="#cb1-18" tabindex="-1"></a>    <span class="fu">geom_point</span>(<span class="at">color=</span><span class="st">&quot;#69b3a2&quot;</span>, <span class="at">size=</span><span class="dv">4</span>) <span class="sc">+</span></span>
<span id="cb1-19"><a href="#cb1-19" tabindex="-1"></a>    <span class="fu">ggtitle</span>(<span class="st">&quot;Evolution of Bitcoin price&quot;</span>) <span class="sc">+</span></span>
<span id="cb1-20"><a href="#cb1-20" tabindex="-1"></a>    <span class="fu">ylab</span>(<span class="st">&quot;bitcoin price ($)&quot;</span>) <span class="sc">+</span></span>
<span id="cb1-21"><a href="#cb1-21" tabindex="-1"></a>    <span class="fu">theme_ipsum</span>()</span></code></pre></div>
<p><img src="connectedscatter_files/figure-html/unnamed-chunk-1-1.png" width="672" style="display: block; margin: auto;" /></p>
<p><em>Note</em>: You can read more about this project <a
href="https://www.data-to-viz.com/story/TwoNumOrdered.html">here</a>.</p>
</div>
<div id="what-for" class="section level1">
<h1>What for</h1>
<hr />
<p>Connected scatterplot makes sense in specific conditions where both
the <a
href="https://www.data-to-viz.com/graph/scatter.html">scatterplot</a>
and the <a href="https://www.data-to-viz.com/graph/line.html">line
chart</a> are not enough:</p>
<ul>
<li>When doing a line chart, it is sometimes difficult to visualize
where the breaks in the curve are, and thus when the observation have
been done.</li>
</ul>
<div class="sourceCode" id="cb2"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb2-1"><a href="#cb2-1" tabindex="-1"></a><span class="co"># Plot</span></span>
<span id="cb2-2"><a href="#cb2-2" tabindex="-1"></a>p1 <span class="ot">&lt;-</span> data <span class="sc">%&gt;%</span></span>
<span id="cb2-3"><a href="#cb2-3" tabindex="-1"></a>  <span class="fu">tail</span>(<span class="dv">60</span>) <span class="sc">%&gt;%</span></span>
<span id="cb2-4"><a href="#cb2-4" tabindex="-1"></a>  <span class="fu">ggplot</span>( <span class="fu">aes</span>(<span class="at">x=</span>date, <span class="at">y=</span>value)) <span class="sc">+</span></span>
<span id="cb2-5"><a href="#cb2-5" tabindex="-1"></a>    <span class="fu">geom_line</span>(<span class="at">color=</span><span class="st">&quot;#69b3a2&quot;</span>) <span class="sc">+</span></span>
<span id="cb2-6"><a href="#cb2-6" tabindex="-1"></a>    <span class="fu">ggtitle</span>(<span class="st">&quot;Line chart&quot;</span>) <span class="sc">+</span></span>
<span id="cb2-7"><a href="#cb2-7" tabindex="-1"></a>    <span class="fu">ylab</span>(<span class="st">&quot;bitcoin price ($)&quot;</span>) <span class="sc">+</span></span>
<span id="cb2-8"><a href="#cb2-8" tabindex="-1"></a>    <span class="fu">theme_ipsum</span>()</span>
<span id="cb2-9"><a href="#cb2-9" tabindex="-1"></a></span>
<span id="cb2-10"><a href="#cb2-10" tabindex="-1"></a>p2 <span class="ot">&lt;-</span> data <span class="sc">%&gt;%</span></span>
<span id="cb2-11"><a href="#cb2-11" tabindex="-1"></a>  <span class="fu">tail</span>(<span class="dv">60</span>) <span class="sc">%&gt;%</span></span>
<span id="cb2-12"><a href="#cb2-12" tabindex="-1"></a>  <span class="fu">ggplot</span>( <span class="fu">aes</span>(<span class="at">x=</span>date, <span class="at">y=</span>value)) <span class="sc">+</span></span>
<span id="cb2-13"><a href="#cb2-13" tabindex="-1"></a>    <span class="fu">geom_line</span>(<span class="at">color=</span><span class="st">&quot;#69b3a2&quot;</span>) <span class="sc">+</span></span>
<span id="cb2-14"><a href="#cb2-14" tabindex="-1"></a>    <span class="fu">geom_point</span>(<span class="at">color=</span><span class="st">&quot;#69b3a2&quot;</span>, <span class="at">size=</span><span class="dv">2</span>) <span class="sc">+</span></span>
<span id="cb2-15"><a href="#cb2-15" tabindex="-1"></a>    <span class="fu">ggtitle</span>(<span class="st">&quot;Connected scatterplot&quot;</span>) <span class="sc">+</span></span>
<span id="cb2-16"><a href="#cb2-16" tabindex="-1"></a>    <span class="fu">ylab</span>(<span class="st">&quot;bitcoin price ($)&quot;</span>) <span class="sc">+</span></span>
<span id="cb2-17"><a href="#cb2-17" tabindex="-1"></a>    <span class="fu">theme_ipsum</span>()</span>
<span id="cb2-18"><a href="#cb2-18" tabindex="-1"></a></span>
<span id="cb2-19"><a href="#cb2-19" tabindex="-1"></a>p1 <span class="sc">+</span> p2</span></code></pre></div>
<p><img src="connectedscatter_files/figure-html/unnamed-chunk-2-1.png" width="864" style="display: block; margin: auto;" /></p>
<ul>
<li>When your X axis is ordered you must connect the dots together to
get a connected scatterplot. Indeed, the pattern is way hard to read if
dots are not connected as illustrated in the graphic below. Note the
this can even lead to misleading conclusion like explained here.</li>
</ul>
<div class="sourceCode" id="cb3"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb3-1"><a href="#cb3-1" tabindex="-1"></a><span class="co"># Plot</span></span>
<span id="cb3-2"><a href="#cb3-2" tabindex="-1"></a>data <span class="sc">%&gt;%</span></span>
<span id="cb3-3"><a href="#cb3-3" tabindex="-1"></a>  <span class="fu">tail</span>(<span class="dv">60</span>) <span class="sc">%&gt;%</span></span>
<span id="cb3-4"><a href="#cb3-4" tabindex="-1"></a>  <span class="fu">ggplot</span>( <span class="fu">aes</span>(<span class="at">x=</span>date, <span class="at">y=</span>value)) <span class="sc">+</span></span>
<span id="cb3-5"><a href="#cb3-5" tabindex="-1"></a>    <span class="fu">geom_point</span>(<span class="at">color=</span><span class="st">&quot;#69b3a2&quot;</span>, <span class="at">size=</span><span class="dv">2</span>) <span class="sc">+</span></span>
<span id="cb3-6"><a href="#cb3-6" tabindex="-1"></a>    <span class="fu">ggtitle</span>(<span class="st">&quot;Line chart&quot;</span>) <span class="sc">+</span></span>
<span id="cb3-7"><a href="#cb3-7" tabindex="-1"></a>    <span class="fu">ylab</span>(<span class="st">&quot;bitcoin price ($)&quot;</span>) <span class="sc">+</span></span>
<span id="cb3-8"><a href="#cb3-8" tabindex="-1"></a>    <span class="fu">theme_ipsum</span>()</span></code></pre></div>
<p><img src="connectedscatter_files/figure-html/unnamed-chunk-3-1.png" width="576" style="display: block; margin: auto;" /></p>
</div>
<div id="variation" class="section level1">
<h1>Variation</h1>
<hr />
<p>The connected scatterplot can also be a powerfull technique to tell a
story about the evolution of 2 variables. Let’s consider a dataset
composed of 3 columns:</p>
<ul>
<li>Year</li>
<li>Number of baby born called Amanda this year</li>
<li>Number of baby born called Ashley</li>
</ul>
<p>We can first visualize the evolution of both names using a usual line
plot with 2 lines:</p>
<div class="sourceCode" id="cb4"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb4-1"><a href="#cb4-1" tabindex="-1"></a><span class="fu">library</span>(babynames)</span>
<span id="cb4-2"><a href="#cb4-2" tabindex="-1"></a></span>
<span id="cb4-3"><a href="#cb4-3" tabindex="-1"></a><span class="co"># Load dataset</span></span>
<span id="cb4-4"><a href="#cb4-4" tabindex="-1"></a>data <span class="ot">&lt;-</span> babynames <span class="sc">%&gt;%</span> </span>
<span id="cb4-5"><a href="#cb4-5" tabindex="-1"></a>  <span class="fu">filter</span>(name <span class="sc">%in%</span> <span class="fu">c</span>(<span class="st">&quot;Ashley&quot;</span>, <span class="st">&quot;Amanda&quot;</span>)) <span class="sc">%&gt;%</span></span>
<span id="cb4-6"><a href="#cb4-6" tabindex="-1"></a>  <span class="fu">filter</span>(sex<span class="sc">==</span><span class="st">&quot;F&quot;</span>)</span>
<span id="cb4-7"><a href="#cb4-7" tabindex="-1"></a></span>
<span id="cb4-8"><a href="#cb4-8" tabindex="-1"></a><span class="co">#plot</span></span>
<span id="cb4-9"><a href="#cb4-9" tabindex="-1"></a>data <span class="sc">%&gt;%</span></span>
<span id="cb4-10"><a href="#cb4-10" tabindex="-1"></a>  <span class="fu">ggplot</span>( <span class="fu">aes</span>(<span class="at">x=</span>year, <span class="at">y=</span>n, <span class="at">group=</span>name, <span class="at">color=</span>name)) <span class="sc">+</span></span>
<span id="cb4-11"><a href="#cb4-11" tabindex="-1"></a>    <span class="fu">geom_line</span>() <span class="sc">+</span></span>
<span id="cb4-12"><a href="#cb4-12" tabindex="-1"></a>    <span class="fu">scale_color_viridis</span>(<span class="at">discrete =</span> <span class="cn">TRUE</span>, <span class="at">name=</span><span class="st">&quot;&quot;</span>) <span class="sc">+</span></span>
<span id="cb4-13"><a href="#cb4-13" tabindex="-1"></a>    <span class="fu">theme</span>(<span class="at">legend.position=</span><span class="st">&quot;none&quot;</span>) <span class="sc">+</span></span>
<span id="cb4-14"><a href="#cb4-14" tabindex="-1"></a>    <span class="fu">ggtitle</span>(<span class="st">&quot;Popularity of American names in the previous 30 years&quot;</span>) <span class="sc">+</span></span>
<span id="cb4-15"><a href="#cb4-15" tabindex="-1"></a>    <span class="fu">theme_ipsum</span>()</span></code></pre></div>
<p><img src="connectedscatter_files/figure-html/unnamed-chunk-4-1.png" width="672" style="display: block; margin: auto;" /></p>
<p>This is an accurate way to visualize the information. However, it
would be much harder to build it if both variables would not share the
same unit. In this case, it would require a dual axis line chart that is
known to be very misleading.</p>
<p>The connected scatterplot can be a good workaround in this
situation:</p>
<div class="sourceCode" id="cb5"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb5-1"><a href="#cb5-1" tabindex="-1"></a><span class="fu">library</span>(grid) <span class="co"># needed for arrow function</span></span>
<span id="cb5-2"><a href="#cb5-2" tabindex="-1"></a><span class="fu">library</span>(ggrepel)</span>
<span id="cb5-3"><a href="#cb5-3" tabindex="-1"></a></span>
<span id="cb5-4"><a href="#cb5-4" tabindex="-1"></a><span class="co"># data</span></span>
<span id="cb5-5"><a href="#cb5-5" tabindex="-1"></a>tmp <span class="ot">&lt;-</span> data <span class="sc">%&gt;%</span></span>
<span id="cb5-6"><a href="#cb5-6" tabindex="-1"></a>  <span class="fu">filter</span>(year<span class="sc">&gt;</span><span class="dv">1970</span>) <span class="sc">%&gt;%</span></span>
<span id="cb5-7"><a href="#cb5-7" tabindex="-1"></a>  <span class="fu">select</span>(year, name, n) <span class="sc">%&gt;%</span></span>
<span id="cb5-8"><a href="#cb5-8" tabindex="-1"></a>  <span class="fu">spread</span>(<span class="at">key =</span> name, <span class="at">value=</span>n, <span class="sc">-</span><span class="dv">1</span>)</span>
<span id="cb5-9"><a href="#cb5-9" tabindex="-1"></a></span>
<span id="cb5-10"><a href="#cb5-10" tabindex="-1"></a><span class="co"># data for date</span></span>
<span id="cb5-11"><a href="#cb5-11" tabindex="-1"></a>tmp_date <span class="ot">&lt;-</span> tmp <span class="sc">%&gt;%</span> <span class="fu">sample_frac</span>(<span class="fl">0.3</span>)</span>
<span id="cb5-12"><a href="#cb5-12" tabindex="-1"></a></span>
<span id="cb5-13"><a href="#cb5-13" tabindex="-1"></a>tmp<span class="sc">%&gt;%</span> </span>
<span id="cb5-14"><a href="#cb5-14" tabindex="-1"></a>  <span class="fu">ggplot</span>(<span class="fu">aes</span>(<span class="at">x=</span>Amanda, <span class="at">y=</span>Ashley, <span class="at">label=</span>year)) <span class="sc">+</span></span>
<span id="cb5-15"><a href="#cb5-15" tabindex="-1"></a>     <span class="fu">geom_point</span>(<span class="at">color=</span><span class="st">&quot;#69b3a2&quot;</span>) <span class="sc">+</span></span>
<span id="cb5-16"><a href="#cb5-16" tabindex="-1"></a>     <span class="fu">geom_text_repel</span>(<span class="at">data=</span>tmp_date) <span class="sc">+</span></span>
<span id="cb5-17"><a href="#cb5-17" tabindex="-1"></a>     <span class="fu">geom_segment</span>(<span class="at">color=</span><span class="st">&quot;#69b3a2&quot;</span>, </span>
<span id="cb5-18"><a href="#cb5-18" tabindex="-1"></a>                  <span class="fu">aes</span>(</span>
<span id="cb5-19"><a href="#cb5-19" tabindex="-1"></a>                    <span class="at">xend=</span><span class="fu">c</span>(<span class="fu">tail</span>(Amanda, <span class="at">n=</span><span class="sc">-</span><span class="dv">1</span>), <span class="cn">NA</span>), </span>
<span id="cb5-20"><a href="#cb5-20" tabindex="-1"></a>                    <span class="at">yend=</span><span class="fu">c</span>(<span class="fu">tail</span>(Ashley, <span class="at">n=</span><span class="sc">-</span><span class="dv">1</span>), <span class="cn">NA</span>)</span>
<span id="cb5-21"><a href="#cb5-21" tabindex="-1"></a>                  ),</span>
<span id="cb5-22"><a href="#cb5-22" tabindex="-1"></a>                  <span class="at">arrow=</span><span class="fu">arrow</span>(<span class="at">length=</span><span class="fu">unit</span>(<span class="fl">0.3</span>,<span class="st">&quot;cm&quot;</span>))</span>
<span id="cb5-23"><a href="#cb5-23" tabindex="-1"></a>      ) <span class="sc">+</span></span>
<span id="cb5-24"><a href="#cb5-24" tabindex="-1"></a>      <span class="fu">theme_ipsum</span>()</span></code></pre></div>
<p><img src="connectedscatter_files/figure-html/unnamed-chunk-5-1.png" width="672" style="display: block; margin: auto;" /></p>
<p>Here the history of both names is obvious. They were not popular at
all in 1972 at the beginning of the dataset. Between 1972 and 1980
Amanda got super popular but Ashley was still not common at all. Then a
second period between 1980 is caracterized by the expansion of Ashley,
Amanda remaining popular. Both names then decreased in popularity until
2014.</p>
<p><em>Warning</em>: Readers usually expect time to flow from
left-to-right. Here it flowed in both directions, what could mislead
your audience. Here are a few advice:</p>
<ul>
<li>The direction of time should be strongly indicated. Arrows and date
must be written on the chart.</li>
<li>This graph is not adapted for all audience. At least, you need to
educate the audience with progressive explanation to make it
impactful.</li>
</ul>
<p><em>Going further</em>:</p>
<ul>
<li><em>The Connected Scatterplot for Presenting Paired Time Series</em>
by <a href="http://steveharoz.com/research/connected_scatterplot/">Haroz
et al</a>.</li>
<li>A nice and famous example of story telling by the <a
href="https://archive.nytimes.com/www.nytimes.com/interactive/2012/09/17/science/driving-safety-in-fits-and-starts.html?smid=tw-share">New
York Times</a></li>
</ul>
</div>
<div id="mistake" class="section level1">
<h1>Common mistakes</h1>
<hr />
<p>The connected scatterplot is subject to the same caveats than the
line chart:</p>
<ul>
<li><a href="https://www.data-to-viz.com/caveat/cut_y_axis.html">To cut
or not to cut the Y axis</a>? Wether or not the Y axis must start at 0
is a hot topic leading to intense debates. The graphic below presents
the same data, starting at 0 (left) or not (right). Generally, line plot
do not need to start at 0 since it allows to observe patterns more
efficiently, but you probably want to learn more about it <a
href="https://www.data-to-viz.com/caveat/cut_y_axis.html">here</a>.</li>
</ul>
<div class="sourceCode" id="cb6"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb6-1"><a href="#cb6-1" tabindex="-1"></a>data <span class="ot">&lt;-</span> <span class="fu">read.table</span>(<span class="st">&quot;https://raw.githubusercontent.com/holtzy/data_to_viz/master/Example_dataset/3_TwoNumOrdered.csv&quot;</span>, <span class="at">header=</span>T)</span>
<span id="cb6-2"><a href="#cb6-2" tabindex="-1"></a>data<span class="sc">$</span>date <span class="ot">&lt;-</span> <span class="fu">as.Date</span>(data<span class="sc">$</span>date)</span>
<span id="cb6-3"><a href="#cb6-3" tabindex="-1"></a></span>
<span id="cb6-4"><a href="#cb6-4" tabindex="-1"></a>p1 <span class="ot">&lt;-</span> data <span class="sc">%&gt;%</span></span>
<span id="cb6-5"><a href="#cb6-5" tabindex="-1"></a>  <span class="fu">tail</span>(<span class="dv">10</span>) <span class="sc">%&gt;%</span></span>
<span id="cb6-6"><a href="#cb6-6" tabindex="-1"></a>  <span class="fu">ggplot</span>( <span class="fu">aes</span>(<span class="at">x=</span>date, <span class="at">y=</span>value)) <span class="sc">+</span></span>
<span id="cb6-7"><a href="#cb6-7" tabindex="-1"></a>    <span class="fu">geom_line</span>(<span class="at">color=</span><span class="st">&quot;#69b3a2&quot;</span>) <span class="sc">+</span></span>
<span id="cb6-8"><a href="#cb6-8" tabindex="-1"></a>    <span class="fu">geom_point</span>(<span class="at">color=</span><span class="st">&quot;#69b3a2&quot;</span>, <span class="at">size=</span><span class="dv">4</span>) <span class="sc">+</span></span>
<span id="cb6-9"><a href="#cb6-9" tabindex="-1"></a>    <span class="fu">ggtitle</span>(<span class="st">&quot;Not cuting&quot;</span>) <span class="sc">+</span></span>
<span id="cb6-10"><a href="#cb6-10" tabindex="-1"></a>    <span class="fu">ylab</span>(<span class="st">&quot;bitcoin price ($)&quot;</span>) <span class="sc">+</span></span>
<span id="cb6-11"><a href="#cb6-11" tabindex="-1"></a>    <span class="fu">theme_ipsum</span>() <span class="sc">+</span></span>
<span id="cb6-12"><a href="#cb6-12" tabindex="-1"></a>    <span class="fu">ylim</span>(<span class="dv">0</span>,<span class="dv">10000</span>)</span>
<span id="cb6-13"><a href="#cb6-13" tabindex="-1"></a></span>
<span id="cb6-14"><a href="#cb6-14" tabindex="-1"></a>p2 <span class="ot">&lt;-</span> data <span class="sc">%&gt;%</span></span>
<span id="cb6-15"><a href="#cb6-15" tabindex="-1"></a>  <span class="fu">tail</span>(<span class="dv">10</span>) <span class="sc">%&gt;%</span></span>
<span id="cb6-16"><a href="#cb6-16" tabindex="-1"></a>  <span class="fu">ggplot</span>( <span class="fu">aes</span>(<span class="at">x=</span>date, <span class="at">y=</span>value)) <span class="sc">+</span></span>
<span id="cb6-17"><a href="#cb6-17" tabindex="-1"></a>    <span class="fu">geom_line</span>(<span class="at">color=</span><span class="st">&quot;#69b3a2&quot;</span>) <span class="sc">+</span></span>
<span id="cb6-18"><a href="#cb6-18" tabindex="-1"></a>    <span class="fu">geom_point</span>(<span class="at">color=</span><span class="st">&quot;#69b3a2&quot;</span>, <span class="at">size=</span><span class="dv">4</span>) <span class="sc">+</span></span>
<span id="cb6-19"><a href="#cb6-19" tabindex="-1"></a>    <span class="fu">ggtitle</span>(<span class="st">&quot;Cuting&quot;</span>) <span class="sc">+</span></span>
<span id="cb6-20"><a href="#cb6-20" tabindex="-1"></a>    <span class="fu">ylab</span>(<span class="st">&quot;bitcoin price ($)&quot;</span>) <span class="sc">+</span></span>
<span id="cb6-21"><a href="#cb6-21" tabindex="-1"></a>    <span class="fu">theme_ipsum</span>()</span>
<span id="cb6-22"><a href="#cb6-22" tabindex="-1"></a></span>
<span id="cb6-23"><a href="#cb6-23" tabindex="-1"></a>p1 <span class="sc">+</span> p2</span></code></pre></div>
<p><img src="connectedscatter_files/figure-html/unnamed-chunk-6-1.png" width="960" style="display: block; margin: auto;" /></p>
<ul>
<li>If you need to compare the evolution of 2 different variables, do
not use <a href="https://www.data-to-viz.com/caveat/dual_axis.html">dual
axis</a>. Indeed dual axis can show very different results depending on
what range you apply to the axis. <a
href="https://www.data-to-viz.com/caveat/dual_axis.html">Read more about
it</a>.</li>
<li>Mind the <a
href="https://www.data-to-viz.com/caveat/spaghetti.html">spaghetti
chart</a>: too many lines make the chart unreadable.</li>
<li>Think about the <a
href="https://www.data-to-viz.com/caveat/aspect_ratio.html">aspect
ratio</a> of the graphic, extreme ratio make the chart unreadable.</li>
</ul>
</div>
<div id="related" class="section level1">
<h1>Related</h1>
<hr />
<div class="row">
<div class="col-lg-3 col-md-6 col-sm-6">
<a href="http://www.data-to-viz.com/graph/bubble.html" class="btn btn-primary mybtnrelated" style="margin-bottom:4px;white-space: normal !important;">
<img  src="https://github.com/holtzy/data_to_viz/raw/master/img/section/BubblePlotSmall.png">
<p class="mytitlerelated">
Bubble plot
</p>
<p class="mytextrelated">
Add a third dimension to your scatter: the circle size
</p>
</a>
</div>
<div class="col-lg-3 col-md-6 col-sm-6">
<a href="http://www.data-to-viz.com/graph/correlogram.html" class="btn btn-primary mybtnrelated" style="margin-bottom:4px;white-space: normal !important;">
<img  src="https://github.com/holtzy/data_to_viz/raw/master/img/section/CorrelogramSmall.png">
<p class="mytitlerelated">
Correlogram
</p>
<p class="mytextrelated">
Shows the relationship between each pair of numeric variables
</p>
</a>
</div>
<div class="col-lg-3 col-md-6 col-sm-6">
<a href="http://www.data-to-viz.com/graph/scatter.html" class="btn btn-primary mybtnrelated" style="margin-bottom:4px;white-space: normal !important;">
<img  src="https://github.com/holtzy/data_to_viz/raw/master/img/section/ScatterPlotSmall.png">
<p class="mytitlerelated">
Scatterplot
</p>
<p class="mytextrelated">
The most common way to display the relationship between 2 numeric
variables
</p>
</a>
</div>
<div class="col-lg-3 col-md-6 col-sm-6">
<a href="http://www.data-to-viz.com/graph/density2d.html" class="btn btn-primary mybtnrelated" style="margin-bottom:4px;white-space: normal !important;">
<img  src="https://github.com/holtzy/data_to_viz/raw/master/img/section/2dDensitySmall.png">
<p class="mytitlerelated">
Density 2d
</p>
<p class="mytextrelated">
One of the best way to avoid overplotting for big sample size
</p>
</a>
</div>
</div>
</div>
<div id="code" class="section level1">
<h1>Build your own</h1>
<hr />
<p>The <a
href="https://r-graph-gallery.com/connected-scatterplot.html">R</a>, <a
href="https:/python-graph-gallery.com/connected-scatter-plot/">Python</a>,
<a
href="https://www.react-graph-gallery.com/connected-scatter-plot">React</a>
and <a href="https://d3-graph-gallery.com/connectedscatter.html">D3</a>
graph galleries are 4 websites providing hundreds of chart example,
always providing the reproducible code. Click the button below to see
how to build the chart you need with your favorite programing
language.</p>
<p>
<a href="https://r-graph-gallery.com/connected-scatterplot.html" class="btn btn-primary">R
graph gallery</a>
<a href="https://python-graph-gallery.com/connected-scatter-plot/" class="btn btn-primary">Python
gallery</a>
<a href="https://www.react-graph-gallery.com/connected-scatter-plot" class="btn btn-primary">React
gallery</a>
<a href="https://d3-graph-gallery.com/connectedscatter.html" class="btn btn-primary">D3
gallery</a>
</p>
</div>
</div>

          <section
            id="form"
            style="
              margin-top: 70px;
              padding-bottom: 70px;
              padding-top: 70px;
              background-color: #f8f9fa;
            "
          >
            <div class="container">
              <div
                style="
                  display: flex;
                  flex-direction: column;
                  align-items: center;
                "
              >
                <h2 style="font-size: 44px" class="text-center">
                  Dataviz decision tree
                </h2>
                <p
                  class="text-center"
                  style="max-width: 600px; font-size: 18px"
                >
                  <a href="https://www.data-to-viz.com">Data To Viz</a> is a
                  comprehensive <b>classification of chart types</b> organized
                  by data input format. Get a high-resolution version of our
                  decision tree delivered to your inbox now!
                </p>
                <div
                  style="
                    margin-top: -50px;
                    width: 100%;
                    display: flex;
                    justify-content: center;
                  "
                >
                  <script
                    async
                    data-uid="8010f15fd2"
                    src="https://prodigious-trailblazer-3628.ck.page/8010f15fd2/index.js"
                  ></script>
                </div>
                <br />
                <div class="text-center">
                  <img
                    class="img-fluid"
                    src="../img/poster/poster_small.png"
                    alt="High Resolution Poster"
                    style="max-width: 400px"
                  />
                </div>
              </div>
            </div>
          </section>

           &nbsp;
<hr />
<p style="text-align: center;">A work by <a href="https://www.yan-holtz.com/">Yan Holtz</a> for <a href="https://data-to-viz.com">data-to-viz.com</a></p>

<!-- Add icon library -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">

<!-- Add font awesome icons -->
<p style="text-align: center;">
	<a href="https://twitter.com/r_graph_gallery?lang=en" class="fa fa-twitter"></a>
	<a href="https://www.linkedin.com/in/yan-holtz-2477534a/" class="fa fa-linkedin"></a>
	<a href="https://github.com/holtzy/" class="fa fa-github"></a>
</p>

<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-79254642-3"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());

  gtag('config', 'UA-79254642-3');
</script>
<script>
var getOutboundLink = function(url) {
	gtag('event', 'click', {
		'event_category': 'outbound',
		'event_label': url,
		'transport_type': 'beacon',
		'event_callback': function(){document.location = url;}
	});
}
</script>

&nbsp;                </div>

    <script>

      // add bootstrap table styles to pandoc tables
      function bootstrapStylePandocTables() {
        $('tr.header').parent('thead').parent('table').addClass('table table-condensed');
      }
      $(document).ready(function () {
        bootstrapStylePandocTables();
      });

          </script>
       </body>
</html>
